package com.quik.web.front.service;

import java.util.List;

import com.quik.entity.BillingItem;
import com.quik.entity.BizBilling;
import com.quik.entity.SysSystemCode;
import com.quik.entity.DtaToken;

/**
 * 功能说明：
 *     咨客手牌的业务逻辑接口
 *     
 * @author jenny
 *
 */
public interface ConsultTokenService {
	
	/**
	 * 手牌列表
	 * @param tokenType 手牌类型
	 * @param status 手牌状态
	 * @return
	 * @throws Exception
	 */
	public List findTokenList(Integer tokenType, String status) throws Exception;
	
	/**
	 * 查询手牌类型列表
	 * @return
	 * @throws Exception
	 */
	public List findTokenTypeList() throws Exception;
	
	/**
	 * 查询手牌状态列表
	 * @return
	 * @throws Exception
	 */
	public List findTokenStatusList() throws Exception;
	
	/**
	 * 统计手牌状态列表
	 * @return
	 * @throws Exception
	 */
	public List findTokenStatList() throws Exception;
	
	/**
	 * 根据手牌、手牌类型、手牌状态查询手牌数量
	 * @param tokenNo
	 * @param tokenType
	 * @param status
	 * @return
	 * @throws Exception
	 */
	public int findTokenCount(String tokenNo, Integer tokenType, String status) throws Exception;
	
	/**
	 * 根据手牌、手牌状态、手牌类型查询手牌列表（分页）
	 * @param tokenNo
	 * @param tokenType
	 * @param status
	 * @param intPage
	 * @param pageSize
	 * @return
	 * @throws Exception
	 */
	public List findTokenList(String tokenNo, Integer tokenType, String status, Integer intPage, Integer pageSize) throws Exception;
	
	/**
	 * 开手牌
	 * @param tokenNo 手牌
	 * @param contactStaffNo  推荐人
	 * @param user 创建用户
	 * @throws Exception
	 */
	public void openToken(String tokenNo, String contactStaffNo, String user) throws Exception;
	
	/**
	 * 根据手牌号查询手牌明细项进行展示
	 * @param tokenNo
	 * @return
	 * @throws Exception
	 */
	public BillingItem findBillingItemByTokenNo(String tokenNo) throws Exception;
	
	/**
	 * 关联手牌
	 * @param tokenNo 手牌
	 * @param billingNo 关联的帐单
	 * @param staffNo 操作员
	 * @throws Exception
	 */
	public void relateToken(String tokenNo, String billingNo, String contactStaffNo, String staffNo) throws Exception;
	
	/**
	 * 判断手牌是否空闲
	 * @param newToken
	 * @return 如果空闲返回true，否则返回false
	 * @throws Exception
	 */
	public boolean isFree(String newToken) throws Exception;
	
	/**
	 * 判断手牌是否开牌
	 * @param tokenNo
	 * @return 如果开牌返回true，否则返回false
	 * @throws Exception
	 */
	public boolean isUsed(String tokenNo) throws Exception;
	
	/**
	 * 交抽象手牌
	 * @param srcToken  源手牌
	 * @param newToken  新手牌
	 * @param staffNo   操作员
	 * @throws Exception
	 */
	public void exchangeToken(String srcToken, String newToken, String staffNo) throws Exception;
	
	/**
	 * 根据手牌号查询手牌详情
	 * @param tokenNo
	 * @return
	 * @throws Exception
	 */
	public DtaToken getTokenByTokenNo(String tokenNo) throws Exception;
	
	/**
	 * 检查手牌是否开牌(以dta_token中的状态为准)
	 * @param tokenNo
	 * @return 已开牌返回true, 否则返回false
	 * @throws Exception
	 */
	public boolean isToken(String tokenNo) throws Exception;
	
	/**
	 * 根据手牌绑定新开牌
	 * @param boundToken
	 * @param relateToken
	 * @param staffNo
	 * @throws Exception
	 */	
	public void relateByToken(String boundToken, String[] relateToken, String staffNo) throws Exception;

	BizBilling openTokens(String[] tokenNos, String contactStaffNo, String user)
			throws Exception;
	
	List<SysSystemCode> findCallTurn() throws Exception;
}
